package com.analysis.utils;

import org.apache.commons.lang3.StringUtils;

/**
 * @Date 2025/9/15
 * @Author 蒋棒
 */
public class StringUtil {

    /**
     * 从URL中提取域名（保留协议）
     * 例如：https://www.example.com/page/XXX -> https://example.com
     *      http://www.example.com/page -> http://example.com
     *
     * @param url URL地址
     * @return 带协议的域名
     */
    public static String extractDomainFromUrl(String url) {
        if (StringUtils.isBlank(url)) {
            return "";
        }
        try {
            // 提取协议部分
            String protocol = "";
            if (url.startsWith("https://")) {
                protocol = "https://";
            } else if (url.startsWith("http://")) {
                protocol = "http://";
            }
            
            // 移除协议前缀
            String domain = url.replaceFirst("^https?://", "");
            // 移除www前缀
            domain = domain.replaceFirst("^www\\.", "");
            // 提取域名部分（移除路径）
            int slashIndex = domain.indexOf('/');
            if (slashIndex > 0) {
                domain = domain.substring(0, slashIndex);
            }
            // 移除端口号
            int colonIndex = domain.indexOf(':');
            if (colonIndex > 0) {
                domain = domain.substring(0, colonIndex);
            }
            
            return StringUtils.isNotBlank(domain) ? protocol + domain : "";
        } catch (Exception e) {
            return "";
        }
    }


    /**
     * 从URL中提取网站名称
     * 例如：https://www.example.com/page -> example.com
     *
     * @param url URL地址
     * @return 网站名称
     */
    public static String extractWebNameFromUrl(String url) {
        if (StringUtils.isBlank(url)) {
            return "未知网站";
        }
        try {
            // 移除协议前缀
            String domain = url.replaceFirst("^https?://", "");
            // 移除www前缀
            domain = domain.replaceFirst("^www\\.", "");
            // 提取域名部分（移除路径）
            int slashIndex = domain.indexOf('/');
            if (slashIndex > 0) {
                domain = domain.substring(0, slashIndex);
            }
            // 移除端口号
            int colonIndex = domain.indexOf(':');
            if (colonIndex > 0) {
                domain = domain.substring(0, colonIndex);
            }
            return StringUtils.isNotBlank(domain) ? domain : "未知网站";
        } catch (Exception e) {
            return "未知网站";
        }
    }

    /**
     * 验证URL格式是否有效
     * 支持http、https协议，以及常见的域名格式
     *
     * @param url 待验证的URL
     * @return true表示有效，false表示无效
     */
    public static boolean isValidUrl(String url) {
        if (StringUtils.isBlank(url)) {
            return false;
        }

        try {
            // 基本的URL格式验证
            String trimmedUrl = url.trim();

            // 检查是否包含协议
            if (!trimmedUrl.startsWith("http://") && !trimmedUrl.startsWith("https://")) {
                return false;
            }

            // 检查URL长度（避免过长的URL）
            if (trimmedUrl.length() > 2048) {
                return false;
            }

            // 使用正则表达式验证URL格式
            String urlPattern = "^(https?://)([\\w\\-]+\\.)+[\\w\\-]+(/[\\w\\-._~:/?#\\[\\]@!$&'()*+,;=%]*)?$";
            boolean matches = trimmedUrl.matches(urlPattern);

            if (!matches) {
                return false;
            }

            // 检查是否包含常见的无效模式
            String lowerUrl = trimmedUrl.toLowerCase();
            if (lowerUrl.contains("localhost") ||
                    lowerUrl.contains("127.0.0.1") ||
                    lowerUrl.contains("0.0.0.0") ||
                    lowerUrl.contains("example.com") ||
                    lowerUrl.contains("test.com") ||
                    lowerUrl.contains("demo.com")) {
                return false;
            }

            return true;

        } catch (Exception e) {
            return false;
        }
    }

}
